#ifndef _HAL_GPIO_H_
#define _HAL_GPIO_H_

#include "app_header.h"

// typedef enum _hdl_gpio_type_typedef HAL_GPIO_TYPE_TYPEDEF;
typedef enum _hdl_gpio_typedef      HAL_GPIO_TYPEDEF;
typedef struct _gpio_pin_struct     hal_gpio_StructInit;


struct hal_gpio_if
{
    int8_t (*gpio_init)(GPIO_Type *base, uint32_t pin, hal_gpio_StructInit *config);
    int8_t (*gpio_write)(GPIO_Type *base, uint32_t pin, HAL_GPIO_TYPEDEF value);
    HAL_GPIO_TYPEDEF (*gpio_read)(GPIO_Type *base, uint32_t pin);

	int8_t (*gpio_int_enable)(GPIO_Type *base, uint32_t pin);
	int8_t (*gpio_int_disable)(GPIO_Type *base, uint32_t pin);
	int8_t (*gpio_int_clr)(GPIO_Type *base, uint32_t pin);
};

int8_t hal_gpio_cfg(GPIO_Type *base, uint32_t pin, hal_gpio_StructInit *config);
int8_t hal_gpio_write(GPIO_Type *base, uint32_t pin, HAL_GPIO_TYPEDEF value);
HAL_GPIO_TYPEDEF hal_gpio_read(GPIO_Type *base, uint32_t pin);
int8_t hal_gpio_int_enable(GPIO_Type* base, unsigned int pin);
int8_t hal_gpio_int_disable(GPIO_Type* base, unsigned int pin);
int8_t hal_gpio_int_clr(GPIO_Type* base, unsigned int pin);
#endif
